package com.hbq.codedemopersion.hbase;

import org.apache.hadoop.hbase.client.coprocessor.Batch;

import java.io.IOException;
import java.util.List;
import java.util.Map;
import java.util.Set;

/**
 * @Author: huibq
 * @Date: 2022/10/26 15:06
 * @Description: IHBaseService
 */

 public interface IHBaseService {


    /**
     * 根据rowKey查询
     * 不推荐使用，具体可以切换到 详细Map查询
     *
     * @param tableName 表名
     * @param rowKeys   名称
     * @param columns   列名
     * @return 返回对象
     */
    @Deprecated
     Map<String, Map<String, String>> queryByRowKey(String tableName, List<String> rowKeys, Set<String> columns, String family);

    /**
     * 按map分类查询rowKey
     *
     * @param tableName    表名
     * @param rowKeyColumn 对应map关系
     * @param family       列族
     * @return 结果
     */
     Map<String, Map<String, String>> queryByRowKey(String tableName, Map<String, Set<String>> rowKeyColumn, String family);

    /**
     * 按map分类查询rowKey
     *
     * @param tableName    表名
     * @param rowKeyColumn 对应map关系
     * @param family       列族
     * @param callback     回调函数
     */
     <R> void processBatchCallback(String tableName, Map<String, Set<String>> rowKeyColumn, String family, final Batch.Callback<R> callback);

    /**
     * 按rowKey前缀查询，不指定列，会拿到family中全部cell
     *
     * @param tableName    表名
     * @param rowKeyPrefix rowKey前缀
     * @param family       列族
     * @return 结果
     */
     List<Map<String, String>> queryByRowKeyPrefix(String tableName, String rowKeyPrefix, String family);

    /**
     * 添加数据
     * @param tableName 表名
     * @param rowKeyColumn <rowKey,<column1,value1><column2,value2>>
     * @param family 列族
     * @throws IOException
     */
     void putData(String tableName, Map<String, Map<String,String>> rowKeyColumn, String family) throws IOException;

    /**
     * 添加数据
     * @param hbasePutDto hbasePutDto
     * @throws IOException
     */
     void putData(HbasePutDTO hbasePutDto) throws IOException;
    /**
     * 创建表
     * @param tableName 表名
     * @param familyList 列族名集合
     * @throws IOException
     */
     void createTable(String tableName, Set<String> familyList) throws IOException;

    /**
     * 删除表
     * @param tableName 表名
     * @throws IOException
     */
    void removeTable(String tableName) throws IOException;

    /**
     * 删除数据
     * @param tableName 表名
     * @param rowKeyColumn <rowKey,[column1,column2]>
     * @param family 列族
     * @throws IOException
     */
    void deleteData(String tableName,Map<String, Set<String>> rowKeyColumn,String family) throws IOException;

    void createTable(HbaseCreateTableDTO hbaseCreateTableDto) throws IOException;

    void deleteData(HbaseDataDTO hbaseDataDTO);

    Map<String, Map<String, String>> queryByRowKey(HbaseDataDTO hbaseDataDTO);

    List<String> queryByRowKey(String tableName, String rowKey, String family);
}
